/*
 * Copyright 2018-10-14 21:39:18 The JA-SIG Collaborative. All rights reserved.
 * distributed with thi file and available online at
 */
package com.lap.scp.erp.core;

import java.util.List;

import com.lap.scd.commons.core.exception.ManagerException;
import com.lap.scd.commons.page.Page;
import com.lap.scp.erp.domain.MaterielDetailDO;
import com.lap.scp.erp.domain.PaymentDO;
import com.lap.scp.erp.domain.PurchaseOrdersDO;
import com.lap.scp.erp.domain.SellOrdersDO;
import com.lap.scp.erp.query.MaterielDetailQueryVO;

/**
 * <pre>
 *  物料明细明细信息 业务操作对象，保持事务一致，尽量在这里减少操作时间，
 *  比如：初始化数据（除非跟数据库交互），尽量不要在该层操作，
 *  不然会拉长事务的时间，加大对数据库的锁（不一定是行锁、全数据锁）时间。
 *
 *  控制层统一命名规则：
 *  增加保存 	insertXX,
 *  修改保存 	updateXX,
 *  查询分页 	queryPage,
 *  根据ID查询 	queryById,
 *  删除 		deleteById
 *
 * </pre>
 * 
 * @author 劳水生 Exp
 * @Date 2018-10-14 21:39:18
 * @since 2.0.0
 */
public interface MaterielDetailManager {
	/**
	 * <pre>
	 * 新增 物料明细明细信息
	 * </pre>
	 *
	 * @param detailDO
	 * @param purchaseDO
	 * @throws ManagerException
	 */
	void insertMaterielDetail(MaterielDetailDO detailDO, PurchaseOrdersDO purchaseDO) throws ManagerException;

	/**
	 * <pre>
	 * 根据ID删除 物料明细明细信息
	 * //TODO 生成的代码，如果确认你已经使用该方法，请删除该行注释，不然后续清理代码的时候，将会删除该方法
	 * </pre>
	 *
	 * @param materielDetailId
	 * @return 更改数量
	 * @throws ManagerException
	 */
	int deleteById(Integer materielDetailId) throws ManagerException;

	/**
	 * <pre>
	 * 分页查询物料明细明细信息
	 * // TODO 生成的代码，如果确认你已经使用该方法，请删除该行注释，不然后续清理代码的时候，将会删除该方法
	 * </pre>
	 *
	 * @param page
	 * @param queryVO
	 * @return 数据集合
	 * @throws ManagerException
	 */
	List<MaterielDetailDO> queryPage(Page page, MaterielDetailQueryVO queryVO) throws ManagerException;

	/**
	 * <pre>
	 * 根据ID查询物料明细明细信息
	 * // TODO 生成的代码，如果确认你已经使用该方法，请删除该行注释，不然后续清理代码的时候，将会删除该方法
	 * </pre>
	 *
	 * @param detailId
	 * @return MaterielDetailDO
	 * @throws ManagerException
	 */
	MaterielDetailDO queryById(Integer detailId) throws ManagerException;

	/**
	 * <pre>
	 * 根据物料ID查询物料明细信息
	 * </pre>
	 * 
	 * @param materielId
	 * @return
	 * @throws ManagerException
	 */
	List<MaterielDetailDO> queryByMaterielId(Integer materielId) throws ManagerException;

	/**
	 * <pre>
	 * 入库
	 * </pre>
	 *
	 * @param detailDO
	 * @param purchaseDO
	 * @return 修改变更的数量
	 * @throws ManagerException
	 */
	int updateIn(MaterielDetailDO detailDO, PurchaseOrdersDO purchaseDO) throws ManagerException;

	/**
	 * <pre>
	 * 出库
	 * </pre>
	 *
	 * @param detailDO
	 * @param payDO
	 * @param sellDO
	 * @return 修改变更的数量
	 * @throws ManagerException
	 */
	int updateOut(MaterielDetailDO detailDO, PaymentDO payDO, SellOrdersDO sellDO) throws ManagerException;

	/**
	 * <pre>
	 * 库存调整
	 * </pre>
	 * 
	 * @param detailDO
	 * @return
	 * @throws ManagerException
	 */
	int updateQuantity(MaterielDetailDO detailDO) throws ManagerException;

}
